System and method for automatic software development kit configuration and distribution

ABSTRACT

A developer analytic module executing on an integrated development environment provides location tracing of a software development toolkit and automatic updates of the SDK. The developer analytic module further provides a user interface that enables a developer to select one or more functional modules to be included in a SDK to be installed at the developer&#39;s IDE.

CROSS-REFERENCE TO RELATED APPLICATIONS

The present utility patent application is a continuation and claimspriority to U.S. patent application Ser. No. 14/179,104, filed on Feb.12, 2014, which claims priority from provisional patent application ofcommon title, inventorship, and ownership, which is assigned Ser. No.61/763,638 and filed on Feb. 12, 2013, and is also a continuation inpart of U.S. patent application Ser. No. 13/567,262, filed on Aug. 6,2012, which is a continuation in part of U.S. patent application Ser.No. 13/426,493, filed on Mar. 21, 2012, which is a continuation in partof U.S. patent application Ser. No. 13/323,166, filed on Dec. 12, 2011.The contents of each of these applications are hereby incorporated byreference.

BACKGROUND

Debugging is a process of finding and extracting bugs, error and/ordefects (hereinafter generally “bugs”), in a computer program, such asan application, thus making the application behave as expected by theapplication developer. Conventionally, developers have been primarilylimited to debugging applications prior to those applications beingdistributed to end users for installation on an end user's mobiledevice, e.g., a smart phone, personal digital assistant (PDA), tabletcomputer, etc. With the growth of applications that may be provided toend users across the world (e.g., mobile applications), developers havelimited ways of receiving information as to what may cause specific bugsin the applications, while the application is being utilized by the enduser and executed on an end user's device.

Software developers commonly utilize one or more software developmentkits (SDKs) that are available from a variety of sources. SDKs maycomprise a plurality of functions that may be linked into an applicationto provide certain functionalities that may be accessed by routines ofthe application. However, a noted disadvantage of SDKs is that they mayinclude a number of functions and/or modules that are not needed for aparticular application. These unneeded modules may significantlyincrease the size of the SDK. This may result in larger applicationsizes, which may be very disadvantageous in certain mobile deviceenvironments where memory may be limited. A further noted disadvantageof conventional SDKs is that a single SDK may not provide all of therequired modules and /or functionality. In such cases, a plurality ofSDKs may need to be linked into an application. The need to utilize aplurality of SDKs typically results in oversized applications.

SUMMARY

The present disclosure relates generally to SDKs and, more particularly,to providing a developer of an application with tools for use in anintegrated development environment.

In general, in one aspect, the invention relates to a system and methodfor providing additional functionality in a developer side applicationassociated with an integrated development environment (“IDE”).Specifically, the developer of the application may install analyticsoftware, which may be embodied as a software development kit (SDK), onan IDE associated with the developer, wherein the analytic software maybe installed with a wizard-like interface having a series of easy tofollow instructions. The analytic software may be any type of softwareassociated with a SDK, such as an advertising framework, or any otherframework, as known by those skilled in the art. Illustratively, theanalytic software is installed in a source code and/or binary formatthat may be integrated into the developer's source code for theapplication. During compilation and/or a build of the application, theanalytic software is incorporated into the application. Once installed,the application, with the analytic software incorporated therein, may beprovided and installed on a plurality of end user devices. Thereafter,the analytic software may work in conjunction with analytic processinglogic to assist the developer in obtaining pertinent information relatedto bugs associated with the application that is being executed on theend user devices.

Illustratively, the developer analytic module executing at a developer'ssite provides a user interface (UI) to enable a developer to identifyone or more types of modules to be integrated into the SDK to beinstalled at the developer's site. The analytic software communicateswith a web server managed by an analytic service provider. The analyticservice provider then generates an appropriate SDK comprising theselected modules for installation and on the developer's IDE. In anillustrative embodiment, the developer analytic module executing at theIDE periodically polls the analytic provider's web site for the mostrecent version numbers of the various component modules of the SDK.After receiving the latest version numbers, the developer analyticmodule determines whether newer versions of any of the modules exist,i.e. determines if the developer's IDE contains the most recent versionof all modules. In response to determining that with the developer IDEdoes not contain the most recent version of all modules, the developeranalytic module requests the most up-to-date versions be sent. Inresponse, the analytic service provider web site generates theappropriate SDK and forwards it to the developer analytic module, whichthen installs it on the developer IDE.

BRIEF DESCRIPTION OF THE DRAWINGS

The embodiments herein may be better understood by referring to thefollowing description in conjunction with the accompanying drawings inwhich like reference numerals indicate identically or functionallysimilar elements, of which:

FIG. 1 is a schematic block diagram of an exemplary computingenvironment in accordance with an illustrative embodiment of the presentinvention;

FIG. 2 is a schematic block diagram of an exemplary web server inaccordance with an illustrative embodiment of the present invention;

FIG. 3 is a schematic block diagram of an exemplary IDE in accordancewith an illustrative embodiment of the present invention;

FIG. 4 is a schematic block diagram of an exemplary end user device inaccordance with an illustrative embodiment of the present invention;

FIG. 5 is a flow chart detailing the steps of an exemplary procedure forinstalling the analytic software on an IDE in accordance withillustrative embodiment of the present invention;

FIG. 6 is an exemplary graphical user interface (GUI) window displayedto a developer by the developer analytic module in accordance withillustrative embodiment of the present invention;

FIG. 7 is an exemplary GUI window displayed to a developer in accordancewith illustrative embodiment of the present invention; and

FIG. 8 is a flow chart detailing the steps of a procedure for adeveloper analytic module to obtain a most recent version of a softwaredevelopment kit (SDK) in accordance with illustrative embodiment of thepresent invention.

DETAILED DESCRIPTION A. Environment

A computer network is a geographically distributed collection ofentities interconnected by communication links and segments fortransporting data between end nodes, such as personal computers andworkstations. Many types of networks are available, with the typesranging from Wi-Fi networks, cell phone networks, local area networks(LANs) to wide area networks (WANs). Wi-Fi is a mechanism for wirelesslyconnecting a plurality of electronic devices (e.g., computers, cellphones, etc.). A device enabled with Wi-Fi capabilities may connect tothe Internet via a wireless network access point, as known by thoseskilled in the art. Cellular networks are radio network distributed overland areas called “cells”, wherein each cell may be served by at leastone fixed-location transceiver known as a cell site or base station.When joined together, these cells may provide radio coverage over a widegeographic area. As known by those skilled in the art, this may enable alarge number of portable transceivers (e.g., mobile phones) tocommunicate with each other. LANs typically connect the entities overdedicated private communications links located in the same generalphysical location, such as a building or campus. WANs, on the otherhand, typically connect geographically dispersed entities overlong-distance communications links, such as common carrier telephonelines, optical lightpaths, synchronous optical networks (SONET), orsynchronous digital hierarchy (SDH) links. The Internet is an example ofa WAN that connects disparate networks throughout the world, providingglobal communication between entities on various networks. The entitiestypically communicate over the network by exchanging discrete frames orpackets of data according to predefined protocols, such as theTransmission Control Protocol/Internet Protocol (TCP/IP), HypertextTransfer Protocol (HTTP). In this context, a protocol consists of a setof rules defining how the entities interact with each other and howpackets and messages are exchanged.

FIG. 1 is a schematic block diagram of an exemplary computingenvironment 100 in accordance with an illustrative embodiment of thepresent invention. Specifically, the computing environment 100 mayinclude one or more integrated development environments (IDE) 300coupled to one or more web servers 200 (managed by an analytic serviceprovider), interconnected by one or more communication links 105.Developer IDE 300, described further below in reference to FIG. 3,represents a development environment utilized by an applicationdeveloper for creation of source code to be compiled, or otherwisebuilt, to generate applications to be distributed for execution on enduser device 400. Illustratively, IDE 300 may implement an Xcodedevelopment environment. As known by those skilled in the art, Xcode isa suite of tools for developing software on a Macintosh (MAC) OperatingSystem X (OS), developed by Apple Inc. While the present invention isdescribed in relation to IDE 300 utilizing Xcode, it should be notedthat the teaching of the present invention may be utilized with anydevelopment environment. As such, all references to Xcode and/or Mac OSshould be taken as exemplary only. Web server 200, described furtherbelow in reference to FIG. 2, is illustratively utilized to enabledistribution of the analytic software to IDE 300, collection of datafrom IDE 300 and end user device 400, as well as provides proper messagepassing among the various entities in environment 100.

Further, end user device 400, database 110, analytic processing logic125, and storage device(s) 115 may be coupled to web servers 200 viacommunication link(s) 107, 130, 135, 140, 145, and 150, respectively.Storage device(s) 115 may for example store debugging information (e.g.,dSYM file), among other data associated with the IDE 300 and end userdevice 400. End user device 400, described further below in reference toFIG. 4, may comprise any device capable of executing applications.Illustratively, end user device 400 may comprise a smart phone, apersonal digital assistant and/or a tablet computer. Exemplary smartphones may utilize the Android operating system, available from Google,Inc., and/or the iOS system, available from Apple, Inc. It should benoted that other smart phones may be utilized in alternativeembodiments. As such, the description herein directed to development foriOS systems should be taken as exemplary only.

It is noted that links 105, 107, 130, 135, 140, 145, and 150 aredepicted in FIG. 1 as separate and individual links for simplicitypurposes, and that communications between the devices may occur over asingle link (e.g., Internet), a plurality of links, or virtual links asknow by those skilled in the art. Moreover, one or more web servers 200,database 110, analytic processing logic 125, and storage device(s) 115may all reside on a single device, or a plurality of devices, andmanaged by the analytic service provider. The devices are shown asseparate entities in FIG. 1 for simplicity purposes. Further, thoseskilled in the art will understand that any number of devices and/orlinks may be used in the computer environment, and that the view shownherein is for simplicity.

FIG. 2 is a schematic block diagram of an exemplary web server 200 inaccordance with an illustrative embodiment of the present invention. Theweb server 200 may comprise a plurality of network interfaces 240, oneor more processors 220, storage device 225, and a memory 205interconnected by a system bus 235. The network interfaces 240 containthe mechanical, electrical, and signaling circuitry for communicatingdata over physical links coupled to a network, such as links 105, 107,130, 135, 145, and 140. The network interfaces may be configured totransmit and/or receive data using a variety of different communicationprotocols, including, inter alia, TCP/IP, UDP, ATM, SONET, HTTP,wireless protocols, Frame Relay, Ethernet, Fiber Distributed DataInterface (FDDI), etc. Notably, a physical network interface 240 mayalso be used to implement one or more virtual network interfaces, suchas for Virtual Private Network (VPN) access, known to those skilled inthe art.

The memory 205 comprises a plurality of locations that are addressableby the processor(s) 220 and the network interfaces 240 for storingsoftware programs and data structures associated with the embodimentsdescribed herein. The processor 240 may comprise necessary elements orlogic adapted to execute the software programs and manipulate the datastructures. An operating system 210, portions of which are typicallyresident in memory 205 and executed by the processor(s), functionallyorganizes the web server 200 by, inter alia, invoking network operationsin support of software processes and/or services executing on the webserver. A web server 215, portions of which are typically resident inmemory 205 are executed by the processor(s), functionally store andexecute logical commands inputted by the analytic service provider anddevelopers. For example, web server 215 may implement a website managedby the analytic service provider, wherein developer may access that website to obtain pertinent information associated with their applicationsand information associated with bugs incurred on the developer'sapplication executing on an end user device. It should be noted that anysystem for distribution of the analytic software, collection ofdebugging information and crash data, etc. may be utilized. As such, thedescription of a web server should be taken as exemplary only. Inalternative embodiments, the various functionalities may be distributedamong a plurality of servers. As such, the description of a single webserver 200 should be taken as exemplary only.

A storage device 225 may store debugging information 230, such as a dSYMfile, that is sent, for example automatically, over the communicationlinks from an IDE. Those skilled in the art will understand that a dSYMfile may contain a plurality of mappings between memory offsets, such asaddresses, and method names and line numbers associated with thebuilt/compiled application created by the developer. The structure andinformation relating to a dSYM file and the functions associatedtherewith are well-known and described in more detail in “DWARFDebugging Information Format,” dated Jul. 27, 1993, the contents ofwhich are hereby incorporated by reference. It should be noted that inalternative embodiments, debugging information may be stored indiffering formats other than dSYMs. For example, when developing for anAndroid based end user device, debugging information may be stored in awell-known de-obsfuscation (de-ob) data container (file) such as thatgenerated by the Proguard software that is available under the GPL. Assuch, the description of using dSYM files should be taken to beexemplary only. It will be apparent to those skilled in the art thatother types of processors and memory, including variouscomputer-readable media, may be used to store and execute programinstructions pertaining to the techniques described herein. Also, whilethe embodiments herein are described in terms of processes or servicesstored in memory, alternative embodiments also include the processesdescribed herein being embodied as modules consisting of hardware,software, firmware, or combinations thereof.

In an alternative embodiment, debugging information 230 may comprise oneor more pre-organized SDKs, each of which may comprise a differentcombination of modules. In such an embodiment, a plurality of modules,each of which is illustratively directed to a different functional area,e.g. debugging, geo-location services, networking services, etc., may beorganized in varying combinations to create various SDKs. A developermay utilize a user interface (UI) to select a desired combination ofmodules to be included in the SDK provided to the IDE. In one exemplaryembodiment, the analytic service provider maintains a plurality of SDKscomprising the various combinations of modules. In an alternativeembodiment, the analytic service provider maintains each moduleseparately and dynamically combines them to create a SDK in response toa developer selecting various modules.

FIG. 3 is a schematic block diagram of an exemplary IDE 300 inaccordance with an illustrative embodiment of the present invention. TheIDE may comprise a plurality of network interfaces 340, one or moreprocessors 320, a memory 305, a storage device 325, and database 355interconnected by a system bus 335. The network interfaces 340 containthe mechanical, electrical, and signaling circuitry for communicatingdata over physical links coupled to a network, such as links 105, 107,130, 135, 140, 145, and 150. The network interfaces may be configured totransmit and/or receive data using a variety of different communicationprotocols, including, inter alia, TCP/IP, UDP, ATM, SONET, HTTP,wireless protocols, Frame Relay, Ethernet, Fiber Distributed DataInterface (FDDI), etc. Notably, a physical network interface 340 mayalso be used to implement one or more virtual network interfaces, suchas for Virtual Private Network (VPN) access, known to those skilled inthe art.

The memory 305 comprises a plurality of locations that are addressableby the processor(s) 320 and the network interfaces 340 for storingsoftware programs and data structures associated with the embodimentsdescribed herein. The processor 340 may comprise necessary elements orlogic adapted to execute the software programs and manipulate the datastructures. An operating system 310, portions of which are typicallyresident in memory 305 and executed by the processor(s), functionallyorganizes the IDE by, inter alia, invoking network operations in supportof software processes and/or services executing on the web server.

A developer analytic module 315, that is associated with the analyticservice provider, portions of which are typically resident in memory 305are executed by the processor(s), may functionally be installed onto IDE300 by a user, such as a developer. The analytic module 315 may, forexample, assist in gathering debugging information 230 associated withthe developer's application on IDE 300. In accordance with variousembodiments of the present invention, the developer analytic module 315may perform various functions to aid in the development of applicationsby aiding the integration of the IDE with the analytic service provider.These various functions, described further below, help to ensure thatthe IDE is utilizing the most up to date SDK.

In accordance with an illustrative embodiment of the present invention,the developer analytic module 315 provides a user interface (UI) to thedeveloper to enable the developer to select one or more modules to beincluded in the SDK provided by the analytic service provider.

A storage device 325 may store debugging information 230, such as a dSYMfile, that is associated with application 330 of the developer. Further,storage device 325 may also store the application 330 of the developerthat may be written and compiled on IDE 300 by a developer, for example.An analytic library 345 and analytic source code 350, that areassociated with an analytic service provider, may beinstalled/incorporated within application 330 of the developer throughuse of an analytic installer, that is described in further detail withreference to FIG. 5.

Database 355, is illustratively configured to store an index of thedebugging information 360 that may be gathered by developer analyticmodule 315. For example, database 355 may store an index of a URL of adSYM file by an identifier, e.g., a universally unique identifier(UUID), associated with the debugging information 230. In anillustrative embodiment, database 355 may be implemented using thewell-known SQLite database, however, it should be noted that inalternative embodiments any type of data structure that permitsindexing, including, e.g., hash tables, etc., may be used. As such, thedescription of a database should be taken as exemplary only. Also, whilethe embodiments herein are described in terms of processes or servicesstored in memory, alternative embodiments also include the processesdescribed herein being embodied as modules consisting of hardware,software, firmware, or combinations thereof.

FIG. 4 is a schematic block diagram of an exemplary end user device 400in accordance with an illustrative embodiment of the present invention.End user device 400 may comprise any device capable of executingapplications. Illustratively, end user devices 400 may comprise a smartphone, a personal digital assistant and/or a tablet computer. Exemplarysmart phones may utilize the Android operation system, available fromGoogle, Inc., and/or the iOS system, available from Apple, Inc. Itshould be noted that other smart phones may be utilized in alternativeembodiments. As such, the description herein directed to the developmentfor iOS systems should be taken as exemplary only. The end user devicemay comprise network interfaces 440, one or more processors 420, amemory 405, a storage device 425, and a cellular network card 445interconnected by a system bus 435. The network interfaces 440 andcellular network 445 contain the mechanical, electrical, and signalingcircuitry for communicating data over physical links coupled to anetwork, such as links 105, 107, 130, 135, 140, 145, and 150. Thenetwork interface 440 and cellular network card 445 may be configured totransmit and/or receive data using a variety of different communicationprotocols, including, inter alia, TCP/IP, UDP, ATM, SONET, HTTP,wireless protocols, Frame Relay, Ethernet, Fiber Distributed DataInterface (FDDI), etc. Notably, a physical network interface 440 mayalso be used to implement one or more virtual network interfaces, suchas for Virtual Private Network (VPN) access, known to those skilled inthe art.

The memory 405 comprises a plurality of locations that are addressableby the processor(s) 420 and the network interfaces 440 for storingsoftware programs and data s structures associated with the embodimentsdescribed herein. The processor 420 may comprise necessary elements orlogic adapted to execute the software programs and manipulate the datastructures. An operating system 410, portions of which are typicallyresident in memory 405 and executed by the processor(s), functionallyorganizes the end user device by, inter alia, invoking networkoperations in support of software processes and/or services executing onthe web server. An application 450, that may have been created by adeveloper on an IDE, and portions of which are typically resident inmemory 405, are executed by the processor(s). Application 450 may bedownloaded or installed on end user device 400 in any manner known tothose skilled in the art. Further, application 450 includes analyticlibrary 455 and analytic source code 460 that may have is beenincorporated within application 450 on IDE 300 by the developer. Whenthe application 450 encounters a bug, crash data 430 associated with thebug and application (e.g., running processes, current RAM usage, IPaddress and network settings, physical orientation of the device in 3Dspace, among other aspects) may be created. Crash data 430 may be storedon storage device 425. Such storage devices may be non-volatile randomaccess memory, flash, micro HD, etc. Also, while the embodiments hereinare described in terms of processes or services stored in memory,alternative embodiments also include the processes described hereinbeing embodied as modules consisting of hardware, software, firmware, orcombinations thereof.

B. Installation Of Analytic Software

FIG. 5 is a flowchart detailing the steps of an exemplary procedure 500for installing analytic software, such as a software development kit(“SDK”), and the developer analytic module 315 on an IDE 300 inaccordance with an illustrative embodiment of the present invention. Itis noted that the SDK may be analytic software or any type of SDK, suchas an advertising framework. Further, it is noted that the analyticsoftware may be obtained in a variety of ways. For example, the analyticsoftware may be downloaded on the IDE from a library (e.g., iTunes), ordownloaded from a website. The procedure 500 starts at step 505 andcontinues to step 510, where an analytic installer is launched. Forexample, the analytic software may be launched utilizing a GUI or acommand line interface (CLI), as known by those skilled in the art.

After the analytic software is launched, a developer may select anapplication with which the developer wishes to incorporate the analyticsoftware on in step 515. After an application has been selected in step515, the procedure continues to step 520, where a developer analyticmodule may be integrated on the developer's IDE. The developer analyticmodule, for example, may assist in gathering debugging information onthe IDE that is associated with the application on the developer's IDE.The developer analytic module, described above, provides addedfunctionality to developers to aid in developing applications.Illustratively, the developer analytic module provides a user interface(UI), such as a graphical user interface (GUI) or a command lineinterface (CLI), to the developer for selecting one or more modules tobe included in the SDK to be installed on the IDE. An exemplary UI isshown and described in relation to FIGS. 6 and 7.

After the analytic module has been integrated in step 520, the procedurecontinues to step 525, where the developer may log into the system(e.g., web server 215 that is managed by the analytic service provider)so that the developer's activity and files/applications associated withthe developer may be tracked. It is noted, that if the user logs inprior to integrating the analytic module, step 525 may be skipped.

Once the developer has logged in at step 525, the procedure continues tostep 530, where the analytic library may be installed in the applicationselected by the developer (e.g., selected in step 515). In anillustrative embodiment, the analytic service provider identifies an SDKthat includes the selected modules (from step 520). In an alternativeembodiment, the developer analytic module generates a custom SDK bycombining the selected modules. It should be noted that the descriptionof the analytic service provider storing a plurality of SDKs withvarying combinations of modules should be taken as exemplary only.Similarly, the description of the analytic service provider storing aplurality of modules that are dynamically combined into a SDK that isthen provided to a developer should be taken as exemplary only. In afurther alternative embodiment, the analytic service provider may storea plurality of SDKs that comprise commonly utilized combinations ofmodules, while also storing individual modules to enable the analyticservice provider to dynamically create a customizable SDK with anuncommon combination of modules.

The procedure continues to step 535, where analytic source code may beinstalled in the application selected by the developer. At step 540,after the developer logs in the system, he may be provided, through alist, or by any other layout, information associated with applicationsassociated with the developer, information associated with bug(s)incurred by the applications associated with the developer, and otherinformation associated with the developer. The procedure 500 thencompletes in step 545.

C. Configuration and Distribution

In accordance with an illustrative embodiment of the present invention,the developer analytic model installed in the IDE provides novelfunctionality to aid in the development of applications. One novelfunction is providing a user interface (UI) to a developer to enable thedeveloper to select one or more modules to be included within the SDK.In response to selecting the one or more modules, the developer analyticmodule transmits such selections to the analytic service provider. Theanalytic service provider illustratively generates the SDK by combiningthe selected modules into a single SDK before transmitting the SDK tothe IDE. In accordance with an illustrative embodiment of the presentinvention, the developer analytic module routinely polls the analyticservice provider's web site to obtain the most recent version numbersassociated with each of the selected modules contained in the SDK. Theweb server responds to such a request with the most recent versionidentifier for each of the selected modules. If any of the modules havebeen updated, i.e., the developer analytic module on the IDE isutilizing an older/out of date version, the developer analytic moduleinitiates a request for the web server to transmit the most recent SDKto developer analytic module. In response to receiving the request, theanalytic service provider's web server generates or selects theappropriate SDK and transmits it to developer analytic module. Uponreceipt by the developer analytic module, the SDK is stored to beincorporated into any future built applications.

FIG. 6 is a screenshot of an exemplary graphical user interface window600 displayed by the developer application module in accordance with anillustrative embodiment of the present invention. Window 600illustratively displays an exemplary dashboard that the developerapplication module generates for a developer in order to provide highlevel overview of certain data associated with a particular application.The GUI window 600 illustratively comprises a plurality of fields ofdata that may be displayed in a variety of ways including, e.g.,numerically, via bar chart, a pie chart, text block, etc. As such, thedescription of any particular field should be taken as exemplary only.

A total unique users field 605 displays the total number of unique usersof an application. A unique user illustratively comprises a user thathas installed the application on an end user device. Illustratively, ifa user installs the application on a plurality of end user devices,e.g., both an iPhone and an iPad, the user is only counted once for thepurpose of determining unique users. However, the developer analyticmodule may record the number of unique devices that an application isinstalled on and may, in alternative embodiments, display the totalnumber of unique devices. The total sessions field 610 displays thetotal number of times that the application has been started. A user bargraph 615 provides information about the number of users who arecurrently using the application, who have used the application today, inthe past week and within the past month.

A sessions bar chart 620 provides information relating to historicalusage of the application. Bar chart 620 provides a day by day graph of,e.g., the number of times an application was utilized, the number ofunique users and the number of errors encountered. This enables adeveloper to see trends over time in number of sessions invoked as wellas number of error occurrences. The central part of window 600 displaysvarious financial statistics. Exemplary field 625 displays a totalrevenue amount, while fields 630, 635 and 640 break down the totalrevenue by showing the amount generated by paid downloads 630,in-application purchases 635 and advertising 640.

A top errors field 645 displays various information relating to the toperrors associated with the application. Illustratively, the field 645displays the module and line where the error occurred, a number of timesthat a crash occurred because of this error, the number of usersaffected and diagnostic information relating to the devices on which thecrashes have occurred.

A comments field 650 displays comments received from an applicationstore, such as the iTunes store provided by Apple, Inc. The commentsfield 650 displays both the ratings received by an application, e.g.,either numerically or via a star based rating, as well as text commentsassociated with the application in the application store. An issueresolution rate chart 655 displays the percentage of issue that havebeen resolved and/or are currently pending. Finally, a user feedback barchart 660 displays the percentage of user feedback that is eitherpositive or negative.

A series of tabs 665, 670 and 675 identify various sub pages that may bedisplayed. Illustratively, tab 665 is utilized to display issuesassociated with a particular application. In the exemplary window 600,the issues tab 665 has been selected. As such, window 600 is displayinginformation related to issues associated with a particular application.Tab 670 is utilized to display a support window (not shown). Tab 675 isutilized to cause the developer application module to display an SDKconfiguration window 700 (shown below and discussed in relation to FIG.7) that enables a developer to select which modules should be includedin the SDK.

It should be noted that the layout and fields displayed in window 600are for illustrative purposes and that, as one skilled in the art willappreciate, variations in layout, changes in the number and/or types offields displayed as well as the types of data displayed may be modifiedwithout departing from the spirit and scope of the invention. As such,the description of GUI window 600 should be taken as exemplary only.

FIG. 7 is an exemplary graphical user interface window 700 and that maybe displayed to a developer in accordance with an illustrativeembodiment of the present invention. The window 700 may be displayedwhen a user selects the SDK configuration tab 675 from the GUI displayedby the developer analytic module. In accordance with an illustrativeembodiment of the present invention, the developer application modulepermits a user to select one or more modules to be integrated into theSDK that is obtained from analytic service provider's web site. Window700 illustratively contains a list of modules and check boxes that maybe selected to indicate a developer's desire to include suchfunctionality in the SDK. Illustratively, window 700 displays a checkbox705 for error reporting, a checkbox 710 for geo-location services and acheckbox 715 for networking services. Additionally, additional checkboxes 720 may be displayed in alternative embodiments of the presentinvention. In operation, a user may select one or more modules, via theGUI, that will be integrated into the SDK prior to installation on theIDE.

FIG. 8 is a flow chart detailing the steps of a procedure 800 forautomatically updating a SDK to the most recent version in accordancewith an illustrative embodiment of the present invention. The procedure800 begins in step 805 and continues to step 810 where the developeranalytic module polls the web server for a most recent version numberfor the SDK and the associated modules contained therein. As will beappreciated by one skilled in the art, any unique identifier may beutilized to identify different versions of an SDK and its constituentmodules. As such, the use of the term version number should be taken asexemplary only. This polling may be performed on a routine basis or maybe the result of user action. For example, the developer analytic modulemay poll the web server for a most recent version on a weekly basis. Inalternative embodiments, the developer analytic module may poll the webserver in response to a developer issuing a command to the developeranalytic module. As such, the description of the developer analyticmodule automatically polling the web server should be taken as exemplaryonly.

Then, in step 815, the web server responds with a most recent versionnumber for each constituent module of the SDK. Illustratively, as willbe appreciated by those skilled in the art, each version of a module isassigned a unique version number, e.g., version 1.0, version 1.01, etc.As the SDK is maintained and generated by the analytic provider thathosts the web server, the web server has knowledge of the most recentversion. The most recent version number is forwarded to the developeranalytic module by the web server in step 815.

Upon receiving the most recent version number(s), the developer analyticmodule then, in step 820, determines whether its local version number isless than the most recent version number. That is, the developeranalytic module determines whether or not it contains the most recentversion of each of the modules in the SDK. More generally, the developeranalytic module determines whether it has the most recent version ofeach module comprising the SDK. In alternative embodiments, the variousversions may not utilize a version number. In such alternativeembodiments, the developer analytic module, in step 820, determineswhether the local version identifier is different from the identifier ofthe most recent version of the module. If the two identifiers differ,then the developer analytic module knows that the version stored locallyis not the most recent version. If the developer analytic moduledetermines that it contains the most recent version number, theprocedure 800 then branches to step 840 and completes.

However, if in step 820, it is determined that the local version numberis less than the most recent version number, the procedure 800 branchesto step 825 where the developer analytic module sends a request to theweb server for the most recent version of the SDK. In response toreceiving the request, the web server transmits the most recent versionof the SDK to the developer analytic module and step 830. As usedherein, the most recent version of a SDK comprises a SDK that includesthe most recent version of each of the modules that the developer hasselected. Upon completion of the transfer, the developer analytic modulethen installs the most recent version of the SDK in step 835 before theprocedure 800 completes in step 840. Procedure 800 ensures that on aregular basis, the SDK will be updated to include the most recentversion comprising the most recent versions of each of the constituentmodules.

It should be noted that the various descriptions and embodimentsdescribed herein are exemplary only. The aspects of the invention may beimplemented in software, such as a non-transitory computer readablemedium, hardware, firmware or any combination thereof. For example, anon-transitory computer readable medium can be configured withinstructions to perform one or more of the steps of the flow chartsdescribed with regard to FIGS. 5 and 8. Further, while this descriptionis written in reference to particular operating systems and/or IDEs, oneskilled in the art will appreciate that the functionality may beimplemented in differing environments. As such, the description of aMacOS environment should be taken as exemplary only.

What is claimed is: 1-10. (canceled)
 11. A computer-implemented methodcomprising: storing, in a database, a plurality of software developmentkits (SDKs) that each include a different combination of SDK modules,each different combination of SDK modules being a combination that isfrequently selected for combination by a respective applicationdeveloper; after the plurality of SDKs are stored in the database,providing, for output, a SDK configuration user interface that includescontrols that each correspond to a different one of the SDK modules;receiving data indicating a selection of two or more controls includedon the SDK configuration user interface; identifying a particular SDKdevelopment kit that is stored in the database, and that includes acombination of SDK modules that corresponds to the selected two or morecontrols; and providing the particular SDK development kit for output.12. The computer-implemented method of claim 11, comprising: storing, inthe database, another plurality of SDKs that each include anotherdifferent combination of SDK modules, each of the other differentcombination of SDK modules being a combination that is uncommonlyselected for combination by the respective application developer. 13.The computer-implemented method of claim 11, wherein each of thedifferent one of the SDK modules include an error reporting module, ageo-location services modules, and a networking services model.
 14. Thecomputer-implemented method of claim 11, comprising: obtaining a mostrecent version number for each of the different one of the SDK modulesthat corresponds to the selected two or more controls.
 15. Thecomputer-implemented method of claim 14, wherein obtaining the mostrecent version number for each of the different one of the SDK modulescomprises polling the database at frequent intervals for the most recentversion number for each of the different one of the SDK modules.
 16. Thecomputer-implemented method of claim 11, wherein providing, for output,the SDK configuration user interface that includes the controls thateach correspond to the different one of the SDK modules furthercomprises: providing on the SDK configuration user interface dataindicating applications associated with the developer, data indicatingbugs incurred by the applications associated with the developer, andadditional information associated with the developer.
 17. Thecomputer-implemented method of claim 14, wherein obtaining the mostrecent version number for each of the different one of the SDK modulesfurther comprises: identifying a difference between the most recentversion number for each of the different one of the SDK modules and acurrently stored version number for each of the different one of the SDKmodules; receiving, by the respective application developer, a requeston the SDK configuration user interface to initiate a transfer of a mostrecent SDK associated with the most recent version number; and receivingthe most recent SDK in response to providing the request to thedatabase.
 18. A system comprising: one or more computers and one or morestorage devices storing instructions that are operable, when executed bythe one or more computers, to cause the one or more computers to performoperations comprising: storing, in a database, a plurality of softwaredevelopment kits (SDKs) that each include a different combination of SDKmodules, each different combination of SDK modules being a combinationthat is frequently selected for combination by a respective applicationdeveloper; after the plurality of SDKs are stored in the database,providing, for output, a SDK configuration user interface that includescontrols that each correspond a different one of the SDK modules;receiving data indicating a selection of two or more controls includedon the SDK configuration user interface; identifying a particular SDKdevelopment kit that is stored in the database, and that includes acombination of SDK modules that corresponds to the selected two or morecontrols; and providing the particular SDK development kit for output.19. The system of claim 18, wherein the operations further comprise:storing, in the database, another plurality of SDKs that each includeanother different combination of SDK modules, each of the otherdifferent combination of SDK modules being a combination that isuncommonly selected for combination by the respective applicationdeveloper.
 20. The system of claim 18, wherein each of the different oneof the SDK modules include an error reporting module, a geo-locationservices modules, and a networking services model.
 21. The system ofclaim 18, wherein the operations further comprise: obtaining a mostrecent version number for each of the different one of the SDK modulesthat corresponds to the selected two or more controls.
 22. The system ofclaim 21, wherein obtaining the most recent version number for each ofthe different one of the SDK modules comprises polling the database atfrequent intervals for the most recent version number for each of thedifferent one of the SDK modules.
 23. The system of claim 18, whereinproviding, for output, the SDK configuration user interface thatincludes the controls that each correspond to the different one of theSDK modules further comprises: providing on the SDK configuration userinterface data indicating applications associated with the developer,data indicating bugs incurred by the applications associated with thedeveloper, and additional information associated with the developer. 24.The system of claim 21, wherein obtaining the most recent version numberfor each of the different one of the SDK modules further comprises:identifying a difference between the most recent version number for eachof the different one of the SDK modules and a currently stored versionnumber for each of the different one of the SDK modules; receiving, bythe respective application developer, a request on the SDK configurationuser interface to initiate a transfer of a most recent SDK associatedwith the most recent version number; and receiving the most recent SDKin response to providing the request to the database.
 25. Anon-transitory computer-readable medium storing software comprisinginstructions executable by one or more computers which, upon suchexecution, cause the one or more computers to perform operationscomprising: one or more computers and one or more storage devicesstoring instructions that are operable, when executed by the one or morecomputers, to cause the one or more computers to perform operationscomprising: storing, in a database, a plurality of software developmentkits (SDKs) that each include a different combination of SDK modules,each different combination of SDK modules being a combination that isfrequently selected for combination by a respective applicationdeveloper; after the plurality of SDKs are stored in the database,providing, for output, a SDK configuration user interface that includescontrols that each correspond a different one of the SDK modules;receiving data indicating a selection of two or more controls includedon the SDK configuration user interface; identifying a particular SDKdevelopment kit that is stored in the database, and that includes acombination of SDK modules that corresponds to the selected two or morecontrols; and providing the particular SDK development kit for output.26. The computer-readable medium of claim 25, wherein the operationscomprise: storing, in the database, another plurality of SDKs that eachinclude another different combination of SDK modules, each of the otherdifferent combination of SDK modules being a combination that isuncommonly selected for combination by the respective applicationdeveloper.
 27. The computer-readable medium of claim 25, wherein each ofthe different one of the SDK modules include an error reporting module,a geo-location services modules, and a networking services model. 28.The computer-readable medium of claim 25, wherein the operationscomprise: obtaining a most recent version number for each of thedifferent one of the SDK modules that corresponds to the selected two ormore controls.
 29. The computer-readable medium of claim 28, whereinobtaining the most recent version number for each of the different oneof the SDK modules comprises polling the database at frequent intervalsfor the most recent version number for each of the different one of theSDK modules.